home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / Information / CSMP Digest / volume 1 / csmp-v1-201.txt < prev    next >
Encoding:
Text File  |  1994-12-08  |  42.0 KB  |  1,099 lines  |  [TEXT/R*ch]

  1. C.S.M.P. Digest             Sun, 01 Nov 92       Volume 1 : Issue 201
  2.  
  3. Today's Topics:
  4.  
  5.     Color Icon questions in menubar (Was Re: Color Questions)
  6.     Disassembler?
  7.     LED Lights Test [code]
  8.     Help: Resources and 'STR#'
  9.     making Bit maps
  10.     Looking for LDEF
  11.  
  12.  
  13.  
  14. The Comp.Sys.Mac.Programmer Digest is moderated by Michael A. Kelly.
  15.  
  16. The digest is a collection of article threads from the internet newsgroup
  17. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  18. regularly and want an archive of the discussions.  If you don't know what a
  19. newsgroup is, you probably don't have access to it.  Ask your systems
  20. administrator(s) for details.  (This means you can't post questions to the
  21. digest.)
  22.  
  23. Each issue of the digest contains one or more sets of articles (called
  24. threads), with each set corresponding to a 'discussion' of a particular
  25. subject.  The articles are not edited; all articles included in this digest
  26. are in their original posted form (as received by our news server at
  27. cs.uoregon.edu).  Article threads are not added to the digest until the last
  28. article added to the thread is at least one month old (this is to ensure that
  29. the thread is dead before adding it to the digest).  Article threads that
  30. consist of only one message are generally not included in the digest.
  31.  
  32. The entire digest is available for anonymous ftp from ftp.cs.uoregon.edu
  33. [128.223.8.8] in the directory /pub/mac/csmp-digest.  Be sure to read the
  34. file /pub/mac/csmp-digest/README before downloading any files.  The most
  35. recent issues are available from sumex-aim.stanford.edu [36.44.0.6] in the
  36. directory /info-mac/digest/csmp.  If you don't have ftp capability, the sumex
  37. archive has a mail server; send a message with the text '$MACarch help' (no
  38. quotes) to LISTSERV@ricevm1.rice.edu for more information.
  39.  
  40. The digest is also available via email.  Just send a note saying that you
  41. want to be on the digest mailing list to mkelly@cs.uoregon.edu, and you will
  42. automatically receive each new issue as it is created.  Sorry, back issues
  43. are not available through the mailing list.
  44.  
  45. Send administrative mail to mkelly@cs.uoregon.edu.
  46.  
  47.  
  48. -------------------------------------------------------
  49.  
  50. From: leonardr@netcom.com (Leonard Rosenthol)
  51. Subject: Color Icon questions in menubar (Was Re: Color Questions)
  52. Date: 23 Sep 92 17:04:22 GMT
  53. Organization: Netcom - Online Communication Services  (408 241-9760 guest)
  54.  
  55. In article <1992Sep22.215315.21568@sagpd1> bberqu@sagpd1 () writes:
  56. >In article <1992Sep14.225645.3163@sagpd1>, bberqu@sagpd1 () writes:
  57. >> 
  58. >> In an application I'm writing I've got a color menu with three different
  59. >> menu items each having a color icon to the left of the menu item (you
  60. >> know just like the Labels menu on the desktop), Now when you select
  61. >> each one of the menu Items it brings up the Color Picker, my problem is
  62. >> how do I make the color Icons in the menu change to the color selected
  63. >> with the color picker?
  64. >> 
  65.     The correct way to do this is to write your own MDEF.  That way
  66. you can set up the data and draw ANY WAY you want!! The other (much harder)
  67. way would be to munge color table in the cicn.
  68.  
  69. - -- 
  70. - -----------------------------------------------------------------------------
  71. Leonard Rosenthol            Internet:     leonardr@netcom.com
  72. Director of Advanced Technology        AppleLink:    MACgician
  73. Aladdin Systems, Inc.            GEnie:        MACgician
  74.  
  75. +++++++++++++++++++++++++++
  76.  
  77. From: Bathsheba.Grossman@bbs.oit.unc.edu (Bathsheba Grossman)
  78. Date: 24 Sep 92 04:57:30 GMT
  79. Organization: Extended Bulletin Board Service
  80.  
  81. >>In article <1992Sep14.225645.3163@sagpd1>, bberqu@sagpd1 () writes:
  82. >>> In an application I'm writing I've got a color menu with three different
  83. >>> menu items each having a color icon to the left of the menu item (you
  84. >>> know just like the Labels menu on the desktop), Now when you select
  85. >>> each one of the menu Items it brings up the Color Picker, my problem is
  86. >>> how do I make the color Icons in the menu change to the color selected
  87. >>> with the color picker?
  88. >>> 
  89. >    The correct way to do this is to write your own MDEF.  That way
  90. >you can set up the data and draw ANY WAY you want!! The other (much harder)
  91. >way would be to munge color table in the cicn.
  92.  
  93. A less drastic possibility might be to fool with the menu color table
  94. using GetMCEntry and SetMCEntries.  This is relatively painless
  95. compared with writing an MDEF, and I successfully used it for this exact
  96. purpose.
  97.  
  98. - -Sheba
  99.  
  100. - --
  101.    The opinions expressed are not necessarily those of the University of
  102.      North Carolina at Chapel Hill, the Campus Office for Information
  103.         Technology, or the Experimental Bulletin Board Service.
  104.            internet:  bbs.oit.unc.edu or 152.2.22.80
  105.  
  106. +++++++++++++++++++++++++++
  107.  
  108. From: piovanel@ghost.dsi.unimi.it (marco piovanelli)
  109. Date: 24 Sep 92 13:45:45 GMT
  110. Organization: Computer Science Dep. - Milan University
  111.  
  112. leonardr@netcom.com (Leonard Rosenthol) writes:
  113.  
  114. >In article <1992Sep22.215315.21568@sagpd1> bberqu@sagpd1 () writes:
  115. >>In article <1992Sep14.225645.3163@sagpd1>, bberqu@sagpd1 () writes:
  116. >>> 
  117. >>> In an application I'm writing I've got a color menu with three different
  118. >>> menu items each having a color icon to the left of the menu item (you
  119. >>> know just like the Labels menu on the desktop), Now when you select
  120. >>> each one of the menu Items it brings up the Color Picker, my problem is
  121. >>> how do I make the color Icons in the menu change to the color selected
  122. >>> with the color picker?
  123. >>> 
  124. >    The correct way to do this is to write your own MDEF.  That way
  125. >you can set up the data and draw ANY WAY you want!! The other (much harder)
  126. >way would be to munge color table in the cicn.
  127.  
  128. Munging the cicn color table isn't that difficult.
  129. In fact, it seems to me that this is exactly what Finder 7.x does for
  130. its Label menu.  The Finder has 7 identical black cicn resources.
  131. When it loads them into memory, it changes a 6-byte block in one
  132. of the cicn color table entries, and the trick is done!
  133. Of course, the cicn resource has to be made unpurgeable.
  134. I've used this technique for exactly the above described purpose
  135. in a couple of applications and it always worked without a glitch.
  136.  
  137. In comparison, writing a MDEF (with all the weird things a MDEF must
  138. care about nowadays: Balloon Help, scrolling indicators, real-gray
  139. dimming, Script Mgr support, etc etc) would be a royal pain.
  140.  
  141. ---------------------------
  142.  
  143. From: sharkman@magicbb.uucp (Matt Daw)
  144. Organization: MAGIC - Macintosh Awareness Group In Canada
  145. Date: Fri, 18 Sep 1992 16:33:11 EST
  146. Subject: Disassembler?
  147.  
  148. Is there such as thing as a disassembler to get source code from
  149. programs? Is it legal?
  150.  
  151.  
  152. +++++++++++++++++++++++++++
  153.  
  154. From: time@ice.com (Tim Endres)
  155. Date: Sat, 19 Sep 92 13:28:03 EST
  156. Organization: ICE Engineering, Inc.
  157.  
  158.  
  159. In article <1992Sep18.163311.237408@magicbb.uucp> (comp.sys.mac.programmer), sharkman@magicbb.uucp (Matt Daw) writes:
  160. > Is there such as thing as a disassembler to get source code from
  161. > programs?
  162.  
  163. Yes!
  164.  
  165. > Is it legal?
  166.  
  167. NO! (generally speaking)
  168.  
  169.  
  170. tim endres - time@ice.com  -or- tbomb!time
  171. ICE Engineering, Inc - 8840 Main St, Whitmore Lake, MI 48189
  172. Phone (313) 449 8288 - FAX (313) 449-9208
  173. USENET - a slow moving self parody... ph
  174.  
  175. +++++++++++++++++++++++++++
  176.  
  177. From: peirce@outpost.SF-Bay.org (Michael Peirce)
  178. Date: 19 Sep 92 19:25:57 GMT
  179. Organization: Peirce Software
  180.  
  181.  
  182. In article <1992Sep18.163311.237408@magicbb.uucp> (comp.sys.mac.programmer), sharkman@magicbb.uucp (Matt Daw) writes:
  183. > Is there such as thing as a disassembler to get source code from
  184. > programs? Is it legal?
  185.  
  186. There is a good one called MacNosy available from Jasik Designs. 
  187. It is very smart about how it disassemblers a Mac program and it know
  188. about most types of code segments.
  189.  
  190. As to the legality, it depends on what you do.  If you disassemble
  191. something so you can copy if verbatum and make a knock off clone you
  192. can expect legal troubles.  If you are just looking out of curiousity
  193. then there is no problem.  And there is a grey area in between :-)
  194.  
  195. - --  Michael Peirce      --   peirce@outpost.SF-Bay.org
  196. - --  Peirce Software     --   Suite 301, 719 Hibiscus Place
  197. - --                      --   San Jose, California USA 95117
  198. - --  Makers of...        --   voice: (408) 244-6554 fax: (408) 244-6882
  199. - --            SMOOTHIE  --   AppleLink: peirce & America Online: AFC Peirce
  200.  
  201. +++++++++++++++++++++++++++
  202.  
  203. From: hp48sx@wupost.wustl.edu (HP48SX Archive Maintainer)
  204. Date: 19 Sep 1992 16:57:04 -0500
  205. Organization: Washington University in Saint Louis, MO USA
  206.  
  207. sharkman@magicbb.uucp (Matt Daw) writes:
  208.  
  209. >Is there such as thing as a disassembler to get source code from
  210. >programs? Is it legal?
  211.  
  212. Yes, there is MacNosy from Jasik which is very good, and then there is
  213. the worse solutions like MacsBug and TMON Pro 3.0, which both are low
  214. level debuggers.
  215.  
  216. And then finally there is a free solution: ResEdit and the CODE  editor
  217. available from ftp.apple.com. Sometimes I prefer them to TMON, but
  218. serious hacking, and copy protection removal both needs a good
  219. debugger.
  220. - -- 
  221. Povl H. Pedersen             hp48sx@wuarchive.wustl.edu
  222. HP48sx archive maintainer
  223.  
  224. All Opinions (C) Copyright the Intergalactic Thought Association
  225.  
  226. +++++++++++++++++++++++++++
  227.  
  228. From: erh0362@tesla.njit.edu (Elliotte Rusty Harold)
  229. Date: 20 Sep 92 13:52:14 GMT
  230. Organization: New Jersey Institute of Technology
  231.  
  232. In article <1CE00001.e1mr30@tbomb.ice.com>, time@ice.com (Tim Endres) writes:
  233. > In article <1992Sep18.163311.237408@magicbb.uucp> (comp.sys.mac.programmer), sharkman@magicbb.uucp (Matt Daw) writes:
  234. >> Is there such as thing as a disassembler to get source code from
  235. >> programs?
  236. > Yes!
  237. >> Is it legal?
  238. > NO! (generally speaking)
  239.  
  240.     Actually writing, distributing or owning a disassembler is perfectly 
  241. legal.  At least in the U.S. portions of the net, here is this little thing 
  242. called the First Amendment, endangered thought it may be.  Use of such an item 
  243. may (or may not) be legal depending on exactly what it is you disassemble.  For 
  244. instance I've recently taking to writing small programs in C, compiling them, 
  245. and then disassembling them to help me with my understanding of 68000 assembly 
  246. language and how it compares to VAX assembly.  (Unfortunately VAX assembly is 
  247. the only kind NJIT teaches.)  It's at least arguable whether or not it is 
  248. legal to disassemble someone else's code that came with a specific license 
  249. restricting disassembly.  
  250.  
  251.     Remember, writing or owning a program whose use may 
  252. be of questionable legality is not the same as using such a program to actually 
  253. violate the law.  Most so-called "black code" has legal as well as illegal 
  254. uses.  Programs that break copy-protection can be used to make backups.
  255. Demon Dialers can be used to check a company's internal phone lines.  Password 
  256. crackers can be used to test the security of your system.  There's even a 
  257. discussion of the possibility of releasing viruses and worms to propagate 
  258. certain bug-fixes in system software.
  259.  
  260. Elliotte Rusty Harold        Department of Mathematics
  261. elharo@m.njit.edu        New Jersey Institute of Technology
  262. erh0362@tesla.njit.edu        Newark, NJ 07102
  263.  
  264. +++++++++++++++++++++++++++
  265.  
  266. From: iron@imag.fr (Francois Menneteau)
  267. Date: 23 Sep 92 13:25:57 GMT
  268. Organization: IMAG Institute, University of Grenoble, France
  269.  
  270. In article <D2150035.e1fm5m@outpost.SF-Bay.org> peirce@outpost.SF-Bay.org (Michael Peirce) writes:
  271. >
  272. >In article <1992Sep18.163311.237408@magicbb.uucp> (comp.sys.mac.programmer), sharkman@magicbb.uucp (Matt Daw) writes:
  273. >> Is there such as thing as a disassembler to get source code from
  274. >> programs? Is it legal?
  275. >
  276. >There is a good one called MacNosy available from Jasik Designs. 
  277. >It is very smart about how it disassemblers a Mac program and it know
  278. >about most types of code segments.
  279. >
  280.  
  281. There is an application (I developped) called rsc viewer (at sumex in demo
  282. folder) that disassembles application and many kind of resources. there is
  283. also an assembler and many useful features (such as searching for a trap
  284. name for example). It is only shareware.
  285.  
  286.  
  287.  
  288.  
  289.  
  290. - -- 
  291. Francois Menneteau ()   __|||||__   () "... I had their lives in my hands
  292. ================== ()    /O   O\    () their fate their fortune in my visions
  293. iron@imag.fr       ()    - .|. -    () No one believed in my true prophecy
  294. ================== ()     \=^=/     () And now it's too late."  (Iron Maiden)
  295.  
  296. +++++++++++++++++++++++++++
  297.  
  298. From: sharkman@magicbb.uucp (Matt Daw)
  299. Organization: MAGIC - Macintosh Awareness Group In Canada
  300. Date: Thu, 24 Sep 1992 17:06:23 EST
  301.  
  302. I have a program that will give me assembly back but I was talking about
  303. like C or Pascal source files? If there is such a thing...what I want to
  304. do is to dissasemble some registered shareware and find out how they
  305. work to help me learn....
  306.  
  307. +++++++++++++++++++++++++++
  308.  
  309. From: Bruce.Hoult@bbs.actrix.gen.nz
  310. Date: 27 Sep 92 11:20:19 GMT
  311. Organization: Actrix Information Exchange
  312.  
  313. In article <1992Sep24.170623.245523@magicbb.uucp> sharkman@magicbb.uucp (Matt Daw) writes:
  314. > I have a program that will give me assembly back but I was talking about
  315. > like C or Pascal source files? If there is such a thing...what I want to
  316. > do is to dissasemble some registered shareware and find out how they
  317. > work to help me learn....
  318.  
  319. Do you want one that will give back the original comments, or will
  320. just the original variable names do?  Does it matter if a Pascal
  321. program gets decompiled as C, or should it be smart enough to
  322. recognise that?  How about C++, FORTRAN and Modula-2?
  323.  
  324. - -- 
  325. Bruce.Hoult@bbs.actrix.gen.nz   Twisted pair: +64 4 477 2116
  326. BIX: brucehoult                 Last Resort:  PO Box 4145 Wellington, NZ
  327. "Cray's producing a 500 MIPS personal computer with 256MB RAM and 8 GB
  328. hard disk that fits in your pocket!"   "Great!  Is it PC compatible?"
  329.  
  330. +++++++++++++++++++++++++++
  331.  
  332. From: de19@umail.umd.edu (Dana S Emery)
  333. Date: 28 Sep 92 15:25:08 GMT
  334. Organization: Personal
  335.  
  336. In article <1992Sep27.112019.17220@actrix.gen.nz>,
  337. Bruce.Hoult@bbs.actrix.gen.nz wrote:
  338. > In article <1992Sep24.170623.245523@magicbb.uucp> sharkman@magicbb.uucp (Matt Daw) writes:
  339. > > I have a program that will give me assembly back but I was talking about
  340. > > like C or Pascal source files? If there is such a thing...what I want to
  341. > > do is to dissasemble some registered shareware and find out how they
  342. > > work to help me learn....
  343.  
  344. [Bruce's sarcastic comments expunged]
  345.  
  346. Compilation is generally not a reversable process.  Usually, all comments
  347. are discarded, symbolic names are bound to arbitrarily assigned constants,
  348. and ultimatly to machine code.  Frequently, an optimising compiler will
  349. emit code which reflects the order of the original, and will then rearange
  350. that code into something equivalent, but not necessarily evocative of the
  351. original. In the Mac environment, routine names often interleave with
  352. code threads, and are referenced by symbolic debuggers (a practice started
  353. by motorala with its macsbug).
  354.  
  355. Some compilers leave enough information available for a symbolic debuger to
  356. refer back to the code, but this information is often skimpy.  In many
  357. cases, data and instructions are intermixed to such an extent that it is
  358. difficult to distinguish them.  
  359.  
  360. And all the above asumes that the language gets compiled into native 68000
  361. code.  Some compilers (Basic, Forth, ? Lisp) emit code which is executed by
  362. a run-time state machine.  Digging into that stuff will drive anyone batty.
  363.  
  364. The derivation of source code from executable object code involves a
  365. process called reverse engineering, and often involves grey arts and
  366. obscure tools.  It is often necessary, but is always nasty.
  367. - --
  368.  
  369. Dana S Emery <de19@umail.umd.edu> | "Novo, de Novo,
  370.                                   |     de novo, de no-o-o-o-o---, 
  371.                                   | Novemba come an' dey gonna go home."
  372.  
  373. ---------------------------
  374.  
  375. From: Hank.Woods@p0.f222.n125.z1.FIDONET.ORG (Hank Woods)
  376. Subject: LED Lights Test [code]
  377. Date: 23 Sep 92 05:28:53 GMT
  378. Organization: FidoNet node 1:125/222.0 - Macademe/Emma, San Francisco CA
  379.  
  380. A couple weeks ago someone posted in this newsgroup some code that would 
  381. make the LED lights on the mac keyboard blink on and off (to show a 
  382. client that the lights on the keyboard relly worked) , but I forgot to 
  383. capture the text, can the person who posted the code please repost that 
  384. code again, so I can study it..Thanks1
  385.  
  386.  
  387.  
  388. - --  
  389. Hank Woods - via FidoNet node 1:125/555
  390.     UUCP: ...!uunet!hoptoad!kumr!fidogate!222.0!Hank.Woods
  391. INTERNET: Hank.Woods@p0.f222.n125.z1.FIDONET.ORG
  392.  
  393. +++++++++++++++++++++++++++
  394.  
  395. From: ksand@apple.com (Kent Sandvik)
  396. Date: 26 Sep 92 01:20:19 GMT
  397. Organization: Apple
  398.  
  399. In article <2201.2AC0BB34@fidogate.FIDONET.ORG>,
  400. Hank.Woods@p0.f222.n125.z1.FIDONET.ORG (Hank Woods) wrote:
  401. > A couple weeks ago someone posted in this newsgroup some code that would 
  402. > make the LED lights on the mac keyboard blink on and off (to show a 
  403. > client that the lights on the keyboard relly worked) , but I forgot to 
  404. > capture the text, can the person who posted the code please repost that 
  405. > code again, so I can study it..Thanks1
  406.  
  407. Didn't Greg Robbins write something similar? Yep, it's placed on the
  408. Developer CD, do a find on 'ledApp'.
  409.  
  410. Kent/DTS
  411. - -------------------
  412. Kent Sandvik (UUCP: ....!apple!ksand; INTERNET: ksand@apple.com)
  413. DISCLAIMER: Private activities on the Net.
  414.  
  415. +++++++++++++++++++++++++++
  416.  
  417. From: grobbins@Apple.COM (Grobbins)
  418. Date: 26 Sep 92 19:57:56 GMT
  419. Organization: Apple Computer Inc., Cupertino, CA
  420.  
  421. In article <ksand-250992182016@wintermute.apple.com> ksand@apple.com (Kent Sandvik) writes:
  422. >In article <2201.2AC0BB34@fidogate.FIDONET.ORG>,
  423. >Hank.Woods@p0.f222.n125.z1.FIDONET.ORG (Hank Woods) wrote:
  424. >> A couple weeks ago someone posted in this newsgroup some code that would 
  425. >> make the LED lights on the mac keyboard blink on and off 
  426. >Didn't Greg Robbins write something similar? Yep, it's placed on the
  427. >Developer CD, do a find on 'ledApp'.
  428.  
  429. ledApp should also be in the snippets collection in the dts area of
  430. ftp.apple.com.  Anyway, pasted below is the portion relevant to setting
  431. the LEDs.  Documentation for ADB is in IM V and in the ADB Tech Note
  432. ("Space Aliens Ate My Mouse".)
  433.  
  434. Grobbins               grobbins@apple.com
  435.  
  436. Usual disclaimers apply.
  437.  
  438. - ---
  439.  
  440. from ledApp.p:
  441.  
  442.   FUNCTION GetA2: LONGINT;
  443.     INLINE $2E8A; { put A2 on stack }
  444.     
  445.   PROCEDURE CompADBOp;
  446.   { completion routine for ADB talks and listens }
  447.     TYPE
  448.       boolPtr = ^BOOLEAN;
  449.     VAR
  450.       completionFlagPtr: boolPtr;
  451.     BEGIN
  452.       { set flag to indicate completion routine has run; A2 points to the flag }
  453.       completionFlagPtr := boolPtr(GetA2); 
  454.       completionFlagPtr^ := TRUE;
  455.     END;
  456.   
  457.   PROCEDURE DoSetLEDs(ledPat: BYTE);
  458.   { set the leds to the given pattern }
  459.     TYPE
  460.       ADBregBuffType = PACKED ARRAY[0..8] of BYTE;
  461.  
  462.     VAR
  463.       retCode:  OSErr;
  464.       i: INTEGER;                  { index through ADB devices }
  465.       numADBs: INTEGER;              { total number of ADB devices }
  466.       anADBDB: array[1..16] of ADBDataBlock;    { data block for each device }
  467.       anADBadd: array[1..16] of ADBAddress;    { address of each device }
  468.       regBuff: ADBregBuffType;          { buffer for ADBOp commands }
  469.       oldReg: BYTE;
  470.       completionFlag: BOOLEAN;
  471.  
  472.     BEGIN
  473.       numADBs := CountADBs;
  474.  
  475.       FOR i:=1 to numADBs DO
  476.         BEGIN
  477.           { get an address for an ADB device }
  478.           anADBadd[i] := GetIndADB(anADBDB[i], i);
  479.           
  480.           { a keyboard has an original address of 2, but the actual ADB address
  481.             may change if there is a conflict; a U.S. extended keyboard has a
  482.             device type ("handler ID") of 2, but unfortunately some other ADB
  483.             devices also do }
  484.           IF (anADBDB[i].origADBAddr = 2) AND (anADBDB[i].devType = 2) THEN 
  485.              { ext keyboard }
  486.             BEGIN
  487.               regBuff[0] := BYTE(2); { initial data buffer length }
  488.  
  489.               { talk }
  490.               completionFlag := FALSE;
  491.               retCode := ADBOp(@completionFlag, @CompADBOp, @regBuff,
  492.                  kTalkCommand + kLEDRegister + 16 * anADBadd[i]);
  493.               
  494.               IF retCode <> noErr THEN
  495.                 EXIT(DoSetLEDs);
  496.               
  497.               { do nothing until completion routine has run }
  498.               REPEAT
  499.                 ;
  500.               UNTIL completionFlag;
  501.               
  502.               { extended keyboard has a word of data, LEDs are low 3 bits }
  503.               oldReg := regBuff[2];
  504.               
  505.               { set the specified bits; note that a clear bit indicates a
  506.                 lit LED }
  507.               regBuff[2] := BOR(BAND(oldReg, 255-7), 7 - LedPat);
  508.  
  509.               { listen }
  510.               completionFlag := FALSE;            
  511.               retCode := ADBOp(@completionFlag, @CompADBOp, @regBuff,
  512.  
  513.                 kListenCommand + kLEDRegister + 16 * anADBadd[i]);
  514.  
  515.               { do nothing until completion routine has run }
  516.               REPEAT
  517.                 ;
  518.               UNTIL (retCode <> noErr) OR (completionFlag);
  519.               
  520.             END; { if }
  521.         END; { for }
  522.     END; { DoSetLEDs }
  523.  
  524. ---------------------------
  525.  
  526. From: aph@milton.u.washington.edu (Al Hallstrom)
  527. Subject: Help: Resources and 'STR#'
  528. Organization: University of Washington, Seattle
  529. Date: Wed, 23 Sep 1992 22:50:24 GMT
  530.  
  531. I am writing a program that adds a new 'STR#' resource.  My problem is that
  532. I don't quite understand the format.  I know the number of string is in
  533. the first spot and then all the strings after that.
  534.  
  535. My Question:  Is there a function that will add these strings to the resource 
  536. of do I have to "manually" put them in?
  537.  
  538. Thanks in advance.
  539.  
  540. - -Philip
  541. aph@u.washington.edu
  542.  
  543.  
  544. +++++++++++++++++++++++++++
  545.  
  546. From: resnick@cogsci.uiuc.edu (Pete Resnick)
  547. Date: 24 Sep 92 01:04:51 GMT
  548. Organization: University of Illinois at Urbana
  549.  
  550. aph@milton.u.washington.edu (Al Hallstrom) writes:
  551.  
  552. >I am writing a program that adds a new 'STR#' resource.  My problem is that
  553. >I don't quite understand the format.  I know the number of string is in
  554. >the first spot and then all the strings after that.
  555.  
  556. >My Question:  Is there a function that will add these strings to the resource 
  557. >of do I have to "manually" put them in?
  558.  
  559. As far as I know, you have to add them by hand (i.e. figure out what
  560. position to put them in, etc), but Munger is a nice routine to do this
  561. with. Check it out.
  562.  
  563. pr
  564. - -- 
  565. Pete Resnick             (...so what is a mojo, and why would one be rising?)
  566. Graduate assistant - Philosophy Department, Gregory Hall, UIUC
  567. System manager - Cognitive Science Group, Beckman Institute, UIUC
  568. Internet: resnick@cogsci.uiuc.edu
  569.  
  570. +++++++++++++++++++++++++++
  571.  
  572. From: haynes@mace.cc.purdue.edu (Carl W. Haynes III)
  573. Date: 24 Sep 92 02:41:04 GMT
  574. Organization: Purdue University
  575.  
  576. In article <Bv25o3.CE9@news.cso.uiuc.edu> resnick@cogsci.uiuc.edu (Pete Resnick) writes:
  577. >aph@milton.u.washington.edu (Al Hallstrom) writes:
  578. >
  579. >>I am writing a program that adds a new 'STR#' resource.  My problem is that
  580. >>I don't quite understand the format.  I know the number of string is in
  581. >>the first spot and then all the strings after that.
  582. >
  583. >As far as I know, you have to add them by hand (i.e. figure out what
  584. >position to put them in, etc), but Munger is a nice routine to do this
  585. >with. Check it out.
  586.  
  587. This is from the StringFunctions unit uploaded to AOL by Jon Wind:
  588.  
  589.  function SetIndString (theID, index: Integer; newStr: Str255): OSErr;
  590. { Set 'STR#' resource entry to a specific string }
  591.  
  592.  
  593.  function SetIndString; {(theID, index: Integer; newStr: Str255): OSErr}
  594.   var
  595.    offset, place: LongInt;
  596.    Hndl: Handle;
  597.    TotalStrings: ^Integer;
  598.    i, theError: Integer;
  599.    EmptyCh: char;
  600.  begin
  601.   EmptyCh := char(0);
  602.   { use Get1Resource to limit search to current resource fork }
  603.   Hndl := GetResource('STR#', theID);             
  604.   if Hndl <> nil then
  605.    begin
  606.     HNoPurge(Hndl);
  607.     TotalStrings := Pointer(ord4(hndl^));
  608.     if index > TotalStrings^ then            { append string(s) }
  609.      begin
  610.       for i := Succ(TotalStrings^) to Pred(index) do
  611.        place := PtrAndHand(Pointer(Ord4(@EmptyCh) + 1), Hndl, 1);    
  612.      { append string to STR# }
  613.       place := PtrAndHand(Pointer(Ord4(@newStr)), Hndl, Succ(Length(newStr)));    
  614.       { set number of strings to reflect addition(s) }
  615.       TotalStrings^ := index;            
  616.      end
  617.     else            { replace existing string with new string }
  618.      begin
  619.       offset := 2;
  620.       { get character offset of specified 'STR#' entry }
  621.       for i := 1 to Pred(index) do        
  622.        offset := offset + Succ(Length(GetIndStr(theID, i)));
  623.       place := Munger(Hndl, 
  624.                       offset, 
  625.                       nil, 
  626.                       Succ(Length(GetIndStr(theID, index))),
  627.                       Pointer(Ord4(@newStr)), 
  628.                       Succ(Length(newStr)));
  629.      end;
  630.     ChangedResource(Hndl);
  631.     theError := ResError;
  632.     if theError = noErr then
  633.      WriteResource(Hndl);
  634.     HPurge(Hndl);
  635.     ReleaseResource(Hndl);
  636.    end
  637.   else
  638.    theError := resNotFound;
  639.   SetIndString := theError;
  640.  end; {of func SetIndString}
  641.  
  642.  
  643.  
  644. - --
  645. Carl W. Haynes III  
  646. Software Arteeest                 ||  CWH3@aol.com <-- temp. out of order
  647. PO Box 2715                       ||  haynes@mace.cc.purdue.edu
  648. W. Lafayette, IN 47906            ||  hcs@applelink.apple.com
  649.  
  650. ---------------------------
  651.  
  652. From: Hinding.1@nd.edu (David Matiskella)
  653. Subject: making Bit maps
  654. Date: 24 Sep 92 04:45:47 GMT
  655. Organization: University of Notre Dame
  656.  
  657.  
  658.     What is the best way to generate bitmaps for a program?  Is there an easy
  659. way to copy a picture from a paint program and store it as a bit map? Was a
  660. resource structure for bitmaps ever defined? Any help will be much
  661. appreciated.
  662.  
  663. +++++++++++++++++++++++++++
  664.  
  665. From: seanmcd@ac.dal.ca
  666. Date: 24 Sep 92 14:45:22 -0300
  667. Organization: Dalhousie University, Halifax, Nova Scotia, Canada
  668.  
  669. How do you make bitmaps? Well, basically, a bit map is a data structure that 
  670. contains the boundaries of the bitmap as well as a pointer to the bitmap
  671. data.
  672.  
  673. Hence, you can declare a variable theBitMap:bitMap; in your variable 
  674. declaration section (assuming Pascal) to put it on the stack, or you might
  675. want to put it in the heap if you're using lots of them.
  676.  
  677. You declare the baseAddr pointer by using NewPointer(sizeOfBitMap). Or, if 
  678. you're worried about heap fragmentation, you might declare it as a handle and
  679. then lock it and singly dereference it when you want to use it with 
  680. Quickdraw routines.
  681.  
  682. Check out Steven Chernikoff's (sp?) book Mac Programming Secrets for formulas
  683. for calculating the proper size of the bit map image.
  684.  
  685. The way I get bitmaps into my programs is to have multifinder on, and just
  686. copy and paste images from Superpaint to ResEdit PICT resources. Don't use
  687. the lasso tool as you get unpredictable boundaries. Then, I get the picture
  688. resource using "GetPicture", set up the bitmap data structure based on the
  689. bounds of the pict resource, ERASE the bitmap after using SetBits to switch
  690. to it, and then draw the picture using DrawPicture. Now, you can dump the
  691. picture by releasing the resource.
  692.  
  693. I don't think that there is any resedit data structure for bitmaps, but you
  694. could easily make one using a TMPL resource. The only drawback is that you
  695. can't see what the picture is unless you also write your own picker! I find
  696. it more convenient to just keep them as picts in my resource file and convert
  697. them to bitmaps in my program as I need them.
  698.  
  699. If you would like some code, I've got standard routines that I use called
  700. MakeBitMap which does just what you think it might. However, I'm sure that
  701. the code probably isn't the most efficient or avant garde. I've only been
  702. programming for about a year and a half on the Mac (casually! I've got
  703. a university degree to fiddle with too...) so others might have better
  704. routines.
  705.  
  706. Hope this basic introduction to bitmaps helps.
  707.  
  708. Oh yeah, make sure that the visRgn isn't going to clip your drawing to the
  709. bitmap, or else you will lose part of your image...
  710.  
  711.  
  712. ---------------------------
  713.  
  714. From: Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley)
  715. Subject: Looking for LDEF
  716. Date: 24 Sep 92 04:11:07 GMT
  717. Organization: Dartmouth College, Hanover, NH
  718.  
  719. Believe it or not, some people actually *use* more than 32K worth of
  720. list manager entries, so here's my beans....
  721.  
  722. I'm looking for an LDEF that acts like the standard LDEF (or with
  723. improvements like independent column sizes...) that allows more than
  724. 32K worth of cell data.  More like 128K would be preferable.  If you
  725. know where I could find this, please let me know, as it would be
  726. painstakingly whittlesome to have to write one, when I know someone has
  727. probably done it....
  728.  
  729. - -Steve Berkley
  730. Stephen.W.Berkley@dartmouth.edu
  731.  
  732. +++++++++++++++++++++++++++
  733.  
  734. From: bowman@reed.edu (Eric Bowman (bobo))
  735. Date: 24 Sep 92 06:25:07 GMT
  736. Organization: Reed College, Portland, OR
  737.  
  738. In article <1992Sep24.041107.29095@dartvax.dartmouth.edu> Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley) writes:
  739. >I'm looking for an LDEF that acts like the standard LDEF (or with
  740. >improvements like independent column sizes...) that allows more than
  741. >32K worth of cell data.  More like 128K would be preferable.  If you
  742. >know where I could find this, please let me know, as it would be
  743. >painstakingly whittlesome to have to write one, when I know someone has
  744. >probably done it....
  745.  
  746. Actually, writing an LDEF is pretty damn easy.  And for large amounts of
  747. data, there are much better ways to store the data than how the LM does it
  748. (kind of like a giant STR#, if I recall correctly). I would recommend
  749. a q&d (quick & dirty) LDEF that knows how your program is storing the data,
  750.  using the refCon of the ListRec to tell the LDEF where the data is.
  751.  
  752. This will in general be much faster than trying to use the standard LDEF
  753. near the 32K limit, and will probably be faster and more memory efficient
  754. since it's aware of your programs internal data structures & doesn't keep
  755. it's own copy of what to display.
  756.  
  757. IM4 is pretty clear about how to write a LDEF; things *may* have changed
  758. since IM6, I'm not sure (I doubt it).  Drop me a line if you have trouble.
  759.  
  760. later,
  761. bobo
  762. bowman@reed.edu
  763.  
  764. +++++++++++++++++++++++++++
  765.  
  766. From: aep@world.std.com (Andrew E Page)
  767. Date: 24 Sep 92 20:47:43 GMT
  768. Organization: The World Public Access UNIX, Brookline, MA
  769.  
  770. In article <1992Sep24.041107.29095@dartvax.dartmouth.edu> Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley) writes:
  771. >
  772. >I'm looking for an LDEF that acts like the standard LDEF (or with
  773. >improvements like independent column sizes...) that allows more than
  774. >32K worth of cell data.  More like 128K would be preferable.  If you
  775. >know where I could find this, please let me know, as it would be
  776. >painstakingly whittlesome to have to write one, when I know someone has
  777. >probably done it....
  778.  
  779.    And if some organization or person has done this complex and
  780. difficult task, and worked it out into a nice compact easy to use
  781. libary of objects or functions don't you believe that they'd like
  782. to save it for their own products or at least earn some money for
  783. liscensing it?
  784.  
  785.  
  786.  
  787. - -- 
  788. Andrew E. Page   (Warrior Poet) |   Decision and Effort The Archer and Arrow
  789. Mac Consultant                  |     The difference between what we are
  790. Macintosh and DSP Technology    |           and what we want to be.
  791.  
  792. +++++++++++++++++++++++++++
  793.  
  794. From: keith@taligent.com (Keith Rollin)
  795. Date: 25 Sep 92 00:31:10 GMT
  796. Organization: Taligent
  797.  
  798. In article <1992Sep24.062507.2699@reed.edu>, bowman@reed.edu (Eric Bowman
  799. (bobo)) wrote:
  800. > In article <1992Sep24.041107.29095@dartvax.dartmouth.edu> Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley) writes:
  801. > >I'm looking for an LDEF that acts like the standard LDEF (or with
  802. > >improvements like independent column sizes...) that allows more than
  803. > >32K worth of cell data.  More like 128K would be preferable.  If you
  804. > >know where I could find this, please let me know, as it would be
  805. > >painstakingly whittlesome to have to write one, when I know someone has
  806. > >probably done it....
  807. > Actually, writing an LDEF is pretty damn easy.  And for large amounts of
  808. > data, there are much better ways to store the data than how the LM does it
  809. > (kind of like a giant STR#, if I recall correctly). I would recommend
  810. > a q&d (quick & dirty) LDEF that knows how your program is storing the data,
  811. >  using the refCon of the ListRec to tell the LDEF where the data is.
  812. > This will in general be much faster than trying to use the standard LDEF
  813. > near the 32K limit, and will probably be faster and more memory efficient
  814. > since it's aware of your programs internal data structures & doesn't keep
  815. > it's own copy of what to display.
  816. > IM4 is pretty clear about how to write a LDEF; things *may* have changed
  817. > since IM6, I'm not sure (I doubt it).  Drop me a line if you have trouble.
  818.  
  819. I don't think Stephen is going to be able to use an LDEF, no matter what
  820. kind of data structure he uses. The scrollbar is not going to be able to
  821. hold more than 32K discrete positive values. Additionally, if the List
  822. Manager draws items by adjusting the port's origin, he won't be able to
  823. draw a list if it is more than 32K pixels high.
  824.  
  825. Roll your own, Stephen, or look at the list/grid classes in MacApp and/or
  826. TCL to see if they help.
  827.  
  828. - -----
  829. Keith Rollin
  830. Phantom Programmer
  831. Taligent, Inc.
  832.  
  833. +++++++++++++++++++++++++++
  834.  
  835. From: Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley)
  836. Date: 25 Sep 92 00:47:30 GMT
  837. Organization: Dartmouth College, Hanover, NH
  838.  
  839. In article <Bv3oFK.7vC@world.std.com>
  840. aep@world.std.com (Andrew E Page) writes:
  841.  
  842. >    And if some organization or person has done this complex and
  843. > difficult task, and worked it out into a nice compact easy to use
  844. > libary of objects or functions don't you believe that they'd like
  845. > to save it for their own products or at least earn some money for
  846. > liscensing it?
  847.  
  848. What comradery!  Your advice is so helpful, I just can't wait to use
  849. it!
  850.  
  851. - -Steve
  852.  
  853. +++++++++++++++++++++++++++
  854.  
  855. From: peter@cujo.curtin.edu.au (Peter N Lewis)
  856. Date: 25 Sep 92 02:13:30 GMT
  857. Organization: NCRPDA, Curtin University
  858.  
  859. In article <1992Sep24.041107.29095@dartvax.dartmouth.edu>,
  860. Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley) wrote:
  861.  
  862. > I'm looking for an LDEF that acts like the standard LDEF (or with
  863. > improvements like independent column sizes...) that allows more than
  864. > 32K worth of cell data.  More like 128K would be preferable.  If you
  865. > know where I could find this, please let me know, as it would be
  866. > painstakingly whittlesome to have to write one, when I know someone has
  867. > probably done it....
  868.  
  869. LDEFs are trivial to write.  You can find a sample LDEF in Pascal in my
  870. Talk code, available from sumex-aim.stanford.edu in /info-mac/source/pascal
  871. (assuming they haven't expired it yet - you can find it at the umich
  872. archive as well), and you can grab some sample LDEFs in C with TopSoft's
  873. FilterTop source, which is available from syrinx.kgs.ukans.edu in the
  874. /topsoft/filtertop directory (for more information about TopSoft or
  875. FilterTop, mail ts-info@syrinx.kgs.ukans.edu or
  876. ft-info@syrinx.kgs.ukans.edu)
  877.  
  878. Have fun all,
  879.    Peter.
  880.  
  881. _______________________________________________________________________
  882. Peter N Lewis, NCRPDA, Curtin University       peter@cujo.curtin.edu.au
  883. GPO Box U1987, Perth WA 6001, AUSTRALIA             FAX: +61 9 367 8141
  884.  
  885. +++++++++++++++++++++++++++
  886.  
  887. From: winer@husc8.harvard.edu (Adam Winer)
  888. Date: 25 Sep 92 03:52:54 GMT
  889.  
  890. keith@taligent.com (Keith Rollin) writes:
  891.  
  892. >In article <1992Sep24.062507.2699@reed.edu>, bowman@reed.edu (Eric Bowman
  893. >(bobo)) wrote:
  894. >> 
  895. >> In article <1992Sep24.041107.29095@dartvax.dartmouth.edu> Stephen.W.Berkley@dartmouth.edu (Stephen W. Berkley) writes:
  896. >> >I'm looking for an LDEF that acts like the standard LDEF (or with
  897. >> >improvements like independent column sizes...) that allows more than
  898. >> >32K worth of cell data.  More like 128K would be preferable.  If you
  899. >> >know where I could find this, please let me know, as it would be
  900. >> >painstakingly whittlesome to have to write one, when I know someone has
  901. >> >probably done it....
  902. >> since IM6, I'm not sure (I doubt it).  Drop me a line if you have trouble.
  903.  
  904. >I don't think Stephen is going to be able to use an LDEF, no matter what
  905. >kind of data structure he uses. The scrollbar is not going to be able to
  906. >hold more than 32K discrete positive values. Additionally, if the List
  907. >Manager draws items by adjusting the port's origin, he won't be able to
  908. >draw a list if it is more than 32K pixels high.
  909.  
  910. Well, you can definitely improve the amount of data the LDEF is storing.
  911. If you're storing an average of, say 30 bytes of data per record,
  912. you can only store about 1000 rows.
  913.  
  914. If you put a handle in refcon which points to the data stored by your
  915. program, and with LSetCell pass offsets, you could store up to
  916. about 8000 rows.  Now if there's a 32K pixel bound, you might only
  917. be able to store about 2000 rows, but, hey, you've doubled its capacity.
  918. And, actually, thinking about the way that LDEF's work, I strongly
  919. doubt there is a 32K pixel bound, so you'll get 8000 rows.
  920. You'll get really awful performance with the "easy" solution I can think
  921. of, unless you can guarantee that each cell has data of a constant length,
  922. or if you could put a decent upper bound on the size of a cell.
  923.  
  924. Adam
  925. - -- 
  926. Adam Winer        | The number you have reached is imaginary.
  927. WINER@HARVARD.EDU    | Please rotate your phone 90 degrees and
  928.                         | try again.
  929.  
  930. +++++++++++++++++++++++++++
  931.  
  932. From: rson@rhi.hi.is (Mimir Reynisson)
  933. Date: 25 Sep 92 07:30:20 GMT
  934.  
  935. The list manager can't hold more than 32k of data because it uses
  936. shorts as offsets into its data structres not because of the Control
  937. Manager. And I dont think it uses SetOrigin() (maybe it does) because
  938. it would have to have its own GrafPort, which it doesn't.
  939.  
  940. Anyway it's quite possible to squeeze more out of the list manager
  941. by using the UserHandle field to acccess your own data. It's limited
  942. to 32.000 elements in the list, but that's a lot more than 32Ks worth
  943. of data.
  944.  
  945. Writing your own code to replace the list manager is very easy though.
  946. And might work a lot better in the long run.
  947.  
  948. Hope this helps..
  949.  
  950. +++++++++++++++++++++++++++
  951.  
  952. From: stack@techbook.com (Bill Stackhouse)
  953. Organization: StoneTablet Publishing
  954. Date: Sat, 26 Sep 1992 01:02:36 GMT
  955.  
  956.  
  957. There are 2 commerical libaries that are marketed as List Manager
  958. replacements. Both have been on the market for since early summer
  959. and have shipped products.
  960.  
  961. StoneTable from StoneTablet Publishing 
  962.    PO Box 12665
  963.    Portland, OR 97212-0665
  964.    internet: stack@techbook.com
  965.    compuserve: 70303.2546
  966.  
  967. and 
  968.  
  969. Matrix Engine from DataPak Software.
  970.    9317 NE Highway 99, Suite G
  971.    Vancouver, WA 98665-8900
  972.    compuserve: 76424-3027
  973.  
  974.  
  975.  
  976. Portland, OR -- September 2, 1992 -- StoneTablet Publishing today
  977. began shipping  StoneTable(TM) for use with MPW C. StoneTable is a
  978. replacement for the Macintosh List Manager.  A version for use with
  979. Think C has been available for several months.  Also with this release,
  980. StoneTable will now support application defined cell validation
  981. functions for both the Think C and MPW C versions.
  982.  
  983. StoneTable provides a rich set of functions for the Macintosh developer
  984. who needs to display or accept data in a tabular form. Conversion from
  985. the List Manager is straight forward because StoneTable contains
  986. functions with similar names and parameters that are semantically
  987. equivalent. 
  988.  
  989. Functionality includes:
  990. - - variable width columns
  991. - - variable height rows
  992. - - data in a cell can be edited in place
  993. - - no internal limit to the amount of data that can be stored in a cell.
  994. The amount of text displayed in a single cell is only limited by
  995. TextEdit
  996. - - multiple cells can be set at once
  997. - - mouse down handling provides an optional interface for moving,
  998. copying, selecting, and resizing a column or row plus scrolling and
  999. editing the text in a cell
  1000. - - columns and rows can be hidden
  1001. - - optional lines between columns and/or rows can have a user supplied
  1002. pattern
  1003. - - irregular selections can be made
  1004. - - columns and rows can have default titles (letters, numbers, or blank)
  1005. - - ability to scroll individual cell text
  1006. - - columns can have applications supplied titles
  1007. - - the formatting (font, size, style, first line visible) of cells can
  1008. vary from cell to cell
  1009. - - columns and rows can have application supplied titles
  1010. - - ability to define a new drawing module for cell data
  1011. - - optional icon palette to aid in setting table mode for extended
  1012. selections, cell edits, etc. Useful for users that limited use of hands
  1013. and new users
  1014. - - define height of column title border and width of row title border
  1015. - - sort columns and rows
  1016. - - edit titles in place
  1017. - - cut/copy/paste cell/title text
  1018. - - have the cursor automatically change to the proper appearance as it
  1019. moves around the table
  1020. - - user written cell validation functions called during cell edits and
  1021. when cell text updated by application.
  1022.  
  1023. Questions may directed to:
  1024.      StoneTablet Publishing
  1025.      Internet: stack@techbook.com
  1026.      CompuServe: 70303,2546
  1027.  
  1028. - -- 
  1029. stack@techbook.COM  Public Access User --- Not affiliated with TECHbooks
  1030. Public Access UNIX and Internet at (503) 644-8135 (1200/2400, N81)
  1031.  
  1032. +++++++++++++++++++++++++++
  1033.  
  1034. From: stack@techbook.com (Bill Stackhouse)
  1035. Organization: StoneTablet Publishing
  1036. Date: Sun, 27 Sep 1992 05:01:49 GMT
  1037.  
  1038.  
  1039. In a prior msg, I have refered to 2 list manager replacements, 
  1040. StoneTable and Matrix Engine.
  1041.  
  1042. I know that StoneTable is written to support
  1043. 32K per cell and has a method for scrolling the text in a single
  1044. cell as well as scrolling the table (list). The functions that
  1045. directly replace the list manager have direct replacements in
  1046. StoneTable making conversion "simple" (eg. LNew becomes TMX_New).
  1047.  
  1048. I do not speak for
  1049. DataPak, therefore I do not know about the Matrix Engine. I believe
  1050. that it is supposed to support large text amounts for cells but
  1051. I don't know how they display it.
  1052.  
  1053. Bill Stackhouse
  1054. StoneTablet Publishing
  1055. stack@techbook.com
  1056.  
  1057. - -- 
  1058. stack@techbook.COM  Public Access User --- Not affiliated with TECHbooks
  1059. Public Access UNIX and Internet at (503) 644-8135 (1200/2400, N81)
  1060.  
  1061. +++++++++++++++++++++++++++
  1062.  
  1063. From: dent@DIALix.oz.au (Andrew Dent)
  1064. Date: 30 Sep 92 08:21:02 GMT
  1065. Organization: DIALix Services, Perth, Western Australia
  1066.  
  1067. DataPak also have a C library (inc source) called Bag of Tricks. It has
  1068. some simpler ListBox routines if you just want single column lists, with
  1069. hooks for extending to more complex lists.
  1070.  
  1071. Their list includes fixed width tabs, multiple selections and comes with
  1072. additional routines to make setting up dialogs VERY easy. They include a 
  1073. complex example with multiple lists/dialog and font-size outlining.
  1074.  
  1075. I've just finished an external for FoxBase+/Mac which used the Bag of Tricks
  1076. lists and I found them VERY easy to use and easily adapted to an A4 world.
  1077.  
  1078. Andy Dent (A.D. Software - Mac & VAX programming)
  1079. 94 Bermuda Dve, BALLAJURA  Western Australia  6066
  1080. Phone/Fax: 09 249 2719 (local)  +619 249 2719 (International)
  1081.        Internet: dent@DIALix.oz.au    Compuserve: 100033,3241
  1082.  
  1083. ---------------------------
  1084.  
  1085. End of C.S.M.P. Digest
  1086. **********************
  1087.